/*** 本文件由CSMIS2.0-ModelCreater(UTF-8)工具辅助生成，版本1.0 ***/

package com.ce.sys.person.action;

import java.io.File;
import java.util.List;

import com.ce.framework.constants.WebConstants;
import com.ce.framework.datamaintain.action.DataMaintainAction;
import com.ce.framework.exception.AppException;
import com.ce.framework.util.BeanAccessUtil;
import com.ce.framework.util.MD5;
import com.ce.framework.util.StringUtil;
import com.ce.sys.login.model.User;
import com.ce.sys.person.dao.po.SysPerson;
import com.ce.util.DbUtil;
import com.ce.util.DictUtil;
import com.ce.util.NetFileUtil;

/**
* 嫦娥软件有限公司 版权所有 2013
* 创建人：　andy
* 创建日期：2010-09-27
* 创建时间：10:08:24
* 功能描述：人员表 [SYS_T_PERSON]更改时用的Action
* ==============================================
* 修改历史
* 修改人		修改时间		修改原因
*
* ==============================================
*/
public class SysPersonAction extends DataMaintainAction 
{    
	private File updateFile;  //上传的廉政承诺书
	private String updateFileFileName;
	
	private File updatePhoto; //上传的个人头像
	private String updatePhotoFileName;
    
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		if(StringUtil.isBlank(op))
			return this.openTreeFrame();
		else
		    return super.execute();
	}


	

	@Override
	protected String addItemForJS() {
		// TODO Auto-generated method stub
		try{
	        this.uploadFile();
		}catch(Exception e){
			e.printStackTrace();
			return super.returnInfoForJS(false, e.getMessage());
		}
		return super.addItemForJS();
	}




	@Override
	protected String modifyItemForJS() {
		// TODO Auto-generated method stub
		try{
            this.uploadFile();
		}catch(Exception e){
			e.printStackTrace();
			return super.returnInfoForJS(false, e.getMessage());
		}
		return super.modifyItemForJS();
	}


	private void uploadFile()throws Exception{
		SysPerson person = (SysPerson)this.po;
		if(updateFile!=null&&StringUtil.isNotBlank(updateFileFileName)){
			String fileId = NetFileUtil.saveFile(updateFile,updateFileFileName,"personImg");
			person.setVcFileId(fileId);
		}
		if(updatePhoto!=null&&StringUtil.isNotBlank(updatePhotoFileName)){
			String photoId = NetFileUtil.saveFile(updatePhoto,updatePhotoFileName,"personImg");
			person.setVcPhotoId(photoId);
		}
        BeanAccessUtil.copyBeanProperties(po, person);
	}


	/**
	 * 开发人： andy
	 * 开发时间： 2013-10-21 下午02:11:58
	 * 功能描述：打开人员管理界面
	 * 方法的参数和返回值
	 * @return
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public String openTreeFrame(){
	  	return "personTreeFrame";
	  }
	
    /**
     * 开发人： andy
     * 开发时间： 2013-10-1 下午01:17:51
     * 功能描述：更改用户状态，将用户状态从非系统用户和系统用户之间进行转换
     * 方法的参数和返回值
     * @return
     * @throws AppException
     * String 
     * ==================================
     * 修改历史
     * 修改人        修改时间      修改原因及内容
     *
     * ==================================
     */
    public String changeState()throws AppException{
    	String[] userids = this.getParameterValues("userIds[]");
        try{
        	int num = DbUtil.getFirstIntSqlQuery("select count(*) from sys_t_person p where p.vc_log$name in " +
        			"(select p2.vc_name from sys_t_person p2 where p2.vc_id in ("+StringUtil.fromArrayToStr(userids, true)+") and p2.vc_status = 0) and p.vc_status = 1 and p.vc_del$flag = 0");
        	if(num>0)
        		throw new AppException("所选用户在系统中已存在同名账号，该操作无法继续，请修改用户姓名后再进行操作！");
        	num = DbUtil.getFirstIntSqlQuery("select count(*) from (select p.vc_name  from sys_t_person p " +
        			"where p.vc_id in("+StringUtil.fromArrayToStr(userids, true)+")  group by p.vc_name  having count(*) >1 ) ");
        	if(num>0)
        		throw new AppException("所选用户中存在同名用户，该操作无法继续，请修改用户姓名后再操作！");
        	for(int i=0;i<userids.length;i++){
				SysPerson person = (SysPerson)this.baselogic.getPOByPk(SysPerson.class.getName(), userids[i]);
				if(person.getVcStatus()!=9){
					person.setVcStatus(person.getVcStatus()==0?1:0);  // 转换用户状态
                    if(person.getVcStatus()==0){
                    	// 状态为非系统登陆帐号
                    	person.setVcLogName("");
                    	// 删除用户角色表中该帐号对应的信息
                    	DbUtil.executeSqlUpdate("delete from sys_t_account$role t where t.vc_user$id = '"+person.getVcId()+"'");
                    }else{
                    	// 状态为系统登陆帐号
    					person.setVcPwd(MD5.toMd5String("888888"));// 每次更改用户状态后都将密码重新设置为初始值
    					// 当用户名超过30位时，将用户名自动截取前25位，已避免用户名超长无法登录的问题
    					String logName = "";
    					if(person.getVcName().length()>=30){
    						logName = person.getVcName().substring(0, 25);	
    					}else{
    						logName = person.getVcName();
    					}
    					
//    					if(StringUtil.isBlank(person.getVcLogName())){
//    					    // 如果登录名为空默认将用户名设置为登录名；
//    						// 由于登录名不能重复，需要先判断该登录名是否已经存在，如果存在即在原有名称后加数字进行标示。即如果有两个张三，账号名将分别为张三和张三1
//    						List userList = this.baselogic.searchByHql("from SysPerson po where po.vcDelFlag = 0 and po.vcName='"+person.getVcName()+"'  and po.vcLogName like '"+logName+"%' order by po.vcLogName desc");
//    						if(userList==null||userList.size()<=0)
//    							person.setVcLogName(logName);	
//    						else{
//    							SysPerson tmpPerson = (SysPerson)userList.get(0);
//    							String newname = tmpPerson.getVcLogName().replace(logName, "");
//    							if(StringUtil.isNotBlank(newname))
//    								newname = logName + (Integer.parseInt(newname)+1);
//    							else
//    								newname = logName + 1;
//    							person.setVcLogName(newname);
//    						}
//    					}
						person.setVcLogName(logName);	
                    }
					this.baselogic.updatePo(person);
				}
				
	         }
        }catch(Exception e){
        	return this.returnInfoForJS(false, e.getMessage());
        }
    	return this.returnInfoForJS(true, null);
    }

	@Override
	public String openModifyPage() throws AppException {
		// TODO Auto-generated method stub
		List titleList = DictUtil.getDictListByName("人员管理_职称或技术等级");
		List positionList = DictUtil.getDictListByName("人员管理_职务或职名");
		List gradeList = DictUtil.getDictListByName("人员管理_文化程度");
		List politicsList = DictUtil.getDictListByName("人员管理_政治面貌");
		List chiefTypeList = DictUtil.getDictListByName("人员管理_职务等级");
		List worktypeList = DictUtil.getDictListByName("人员管理_工种");
		this.setAttribute("titleList", titleList);
		this.setAttribute("positionList", positionList);
		this.setAttribute("politicsList", politicsList);
		this.setAttribute("chiefTypeList", chiefTypeList);
		this.setAttribute("gradeList", gradeList);
		this.setAttribute("worktypeList", worktypeList);
		String ret = super.openModifyPage();
		SysPerson person = (SysPerson)this.po;
		this.setAttribute("fileUrl", NetFileUtil.getFilesHtml(person.getVcFileId()));
		this.setAttribute("photoUrl", NetFileUtil.getImagePath(person.getVcPhotoId()));
		return ret;
	}

	/**
	 * 开发人： andy
	 * 开发时间： 2013-10-3 下午02:04:54
	 * 功能描述： 打开个人信息修改界面
	 * 方法的参数和返回值
	 * @return
	 * @throws AppException
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public String openSelfModifyPage()throws AppException{
		if(User.getUser().isSuperUser()){
			throw new AppException("超级管理员不能查看个人基本情况！");
		}else{
			this.setAttribute(WebConstants.SELECT_ITEMS_NAME, User.getUser().getVcId());
			List titleList = DictUtil.getDictListByName("人员管理_职称或技术等级");
			List positionList = DictUtil.getDictListByName("人员管理_职务或职名");
			List gradeList = DictUtil.getDictListByName("人员管理_文化程度");
			List politicsList = DictUtil.getDictListByName("人员管理_政治面貌");
			List chiefTypeList = DictUtil.getDictListByName("人员管理_职务等级");
			List worktypeList = DictUtil.getDictListByName("人员管理_工种");
			this.setAttribute("titleList", titleList);
			this.setAttribute("positionList", positionList);
			this.setAttribute("politicsList", politicsList);
			this.setAttribute("chiefTypeList", chiefTypeList);
			this.setAttribute("gradeList", gradeList);
			this.setAttribute("worktypeList", worktypeList);
			this.po = (SysPerson) this.baselogic.getPOByPk(SysPerson.class.getName(), User.getUser().getVcId());
			SysPerson person = (SysPerson)this.po;
			this.setAttribute("fileUrl", NetFileUtil.getFilesHtml(person.getVcFileId()));
			this.setAttribute("photoUrl", NetFileUtil.getImagePath(person.getVcPhotoId()));
		}
		return "openSelfModifyPage";
	}
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-10-3 下午02:05:27
	 * 功能描述：修改个人密码
	 * 方法的参数和返回值
	 * @return
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public String modifyPwdForJS()throws AppException{
		String logName  = this.getParameter("logName").trim();
		String newPwd  = this.getParameter("newPwd1").trim();
		String userId = this.getParameter("userId").trim();
		String oldPwd = this.getParameter("oldPwd").trim();
		int userNum = this.baselogic.getCntByHQL("from SysPerson po where po.vcLogName = '"+logName+"' and po.vcId !='"+userId+"' and po.vcDelFlag = 0");
		if(userNum>0){
			super.returnInfoForJS(false, "nameIsUsed");
		}else {
			int checkPwd = this.baselogic.getCntByHQL("from SysPerson po where po.vcId = '"+userId+"' and po.vcPwd ='"+MD5.toMd5String(oldPwd)+"' and po.vcDelFlag = 0");
			if(checkPwd==0){
				super.returnInfoForJS(false, "pwdError");
			}else{
				SysPerson person = (SysPerson)this.baselogic.getPOByPk(SysPerson.class.getName(), userId);
				person.setVcLogName(logName);
				person.setVcPwd(MD5.toMd5String(newPwd));
				this.baselogic.updatePo(person);
				User.getUser().setVcLogName(logName);
				User.getUser().setVcPwd(person.getVcPwd());
				super.returnInfoForJS(true, null);	
			}
		}
		return null;
	}
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-10-3 下午02:05:09
	 * 功能描述：打开个人密码修改界面
	 * 方法的参数和返回值
	 * @return
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public String openMoidfySelfPwdPage()throws AppException{
		if(User.getUser().isSuperUser()){
			throw new AppException("超级管理员不能修改个人密码！");
		}
		return "openMoidfySelfPwdPage";
	}

    /**
     * 开发人： andy
     * 开发时间： 2013-3-21 上午11:50:21
     * 功能描述：重置账号密码，密码重置为888888
     * 方法的参数和返回值
     * @return
     * @throws AppException
     * String 
     * ==================================
     * 修改历史
     * 修改人        修改时间      修改原因及内容
     *
     * ==================================
     */
    public String resetPWD()throws AppException{
    	String[] delIds = this.getParameterValues(WebConstants.SELECT_ITEMS_NAMES);
    	int cnt = DbUtil.executeSqlUpdate("update sys_t_person t set t.vc_pwd = '"+MD5.toMd5String("888888")+"' where t.vc_id in ("+StringUtil.fromArrayToStr(delIds, true)+") ");
    	if(cnt!=-1)
    		return super.returnInfoForJS(true,null);
    	else
    	    return super.returnInfoForJS(false, "密码重置失败，请稍后再试！");
    }
    
    public String changeUserOrg()throws AppException{
    	if("addPage".equals(this.getParameter("op"))){
    		//打开选择机构的页面
    		return "chooseUserOrgPage";
    	}else{
    		String[] ids = this.getParameterValues("vcIds");
    		String orgId = this.getParameter("vcOrgId");
    		DbUtil.executeSqlUpdate("update sys_t_person t set t.vc_org$id = '"+orgId+"' where t.vc_id in ("+StringUtil.fromArrayToStr(ids, true)+")");
    		return super.returnInfoForJS(true, "人员移动成功！");
    	}
    }
	
    /**
	 * 开发人： 王廷艳
	 * 开发时间： 2012-10-17 上午09:36:37
	 * 功能描述：移动人员位置
	 * 方法的参数和返回值
	 * @return
	 * @throws AppException
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public String moveUp()throws AppException{
		try{
			String vcId = this.getParameter("vcId"); //要移动的栏目ID
			String upId = this.getParameter("upId"); //交换的栏目ID
			SysPerson upPerson = (SysPerson)this.baselogic.getPOByPk(SysPerson.class.getName(), vcId);
			SysPerson downPerson = (SysPerson)this.baselogic.getPOByPk(SysPerson.class.getName(), upId);
			int up = downPerson.getNseq();
			downPerson.setNseq(upPerson.getNseq());
			upPerson.setNseq(up);
			this.baselogic.updatePo(upPerson);
			this.baselogic.updatePo(downPerson);
			super.returnInfoForJS(true, null);
		}catch(Exception e){
			super.returnInfoForJS(false, e.getMessage());
		}

		return null;
	}




	public File getUpdateFile() {
		return updateFile;
	}




	public void setUpdateFile(File updateFile) {
		this.updateFile = updateFile;
	}




	public String getUpdateFileFileName() {
		return updateFileFileName;
	}




	public void setUpdateFileFileName(String updateFileFileName) {
		this.updateFileFileName = updateFileFileName;
	}




	public File getUpdatePhoto() {
		return updatePhoto;
	}




	public void setUpdatePhoto(File updatePhoto) {
		this.updatePhoto = updatePhoto;
	}




	public String getUpdatePhotoFileName() {
		return updatePhotoFileName;
	}




	public void setUpdatePhotoFileName(String updatePhotoFileName) {
		this.updatePhotoFileName = updatePhotoFileName;
	}

	
	
}

